container: ensure we only append a single node
authorBenjamin Otte <otte@redhat.com>
Tue, 15 Nov 2016 21:39:26 +0000 (22:39 +0100)
committerBenjamin Otte <otte@redhat.com>
Tue, 15 Nov 2016 21:39:26 +0000 (22:39 +0100)
The snapshot vfuncs must only append at most a single node,
otherwise things are going to break if the widget is the root node.

Unfortunately there is no code that can check this in a generic fashion,
so we'll have to debug this on a case-by-case basis.

gtk/gtkcontainer.c

index 629eda1865d54355aeeb3b8a34ffb3e000ed45cb..767cc5ae31661b886d24b8234df193b2f6b17895 100644 (file)
@@ -3095,10 +3095,21 @@ gtk_container_snapshot (GtkWidget   *widget,
                         GtkSnapshot *snapshot)
 {
   GtkContainer *container = GTK_CONTAINER (widget);
-  
+  GtkAllocation allocation, clip;
+  graphene_rect_t bounds;
+
+  gtk_widget_get_clip (widget, &clip);
+  gtk_widget_get_allocation (widget, &allocation);
+  graphene_rect_init (&bounds,
+                      clip.x - allocation.x, clip.y - allocation.y,
+                      clip.width, clip.height);
+  gtk_snapshot_push (snapshot, &bounds, "Children<%s>", G_OBJECT_TYPE_NAME (container));
+
   gtk_container_forall (container,
                         gtk_container_snapshot_forall,
                         snapshot);
+
+  gtk_snapshot_pop (snapshot);
 }
 
 static void